/*
 * @Author: wwssaabb
 * @Date: 2021-11-25 16:08:14
 * @LastEditTime: 2021-11-25 17:26:00
 * @FilePath: \handwritten-code\algorithm\打家劫舍.js
 */

/* 
你是一个专业的小偷， 计划偷窃沿街的房屋。 每间房内都藏有一定的现金， 影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统， 
如果两间相邻的房屋在同一晚上被小偷闯入， 系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组， 计算你在不触动警报装置的情况下， 能够偷窃到的最高金额
*/

//时间复杂度O(n)、空间复杂度O(n)
var rob = function (nums) {
  let dp = [];
  dp[0] = nums[0];
  dp[1] = Math.max(nums[0], nums[1])
  for (let i = 2; i < nums.length; i++) dp[i] = Math.max(dp[i - 2] + nums[i], dp[i - 1])
  return dp[nums.length - 1]
};


console.log(rob([2, 7, 9, 3, 1])) //12
console.log(rob([1, 2, 3, 1])) //4
console.log(rob([1, 2, 3, 1, 7, 8, 9, 7, 8, 11, 1])) //31